package com.sf.guava.collect;

import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.UnmodifiableIterator;

import java.util.function.Consumer;

/**
 * @Classname ImmutableCollectionTest
 * @Description 不可变集合
 * 不可变对象具有许多优点，包括：
 *
     * 可供不受信任的库使用。
     * 线程安全：可以被许多线程使用，而不会出现竞争状况。
     * 不需要支持变异，并且可以通过这种假设节省时间和空间。所有不可变的收集实现比其可变的同级具有更高的内存效率。（分析）
     * 可以用作常量，并期望它将保持不变。
     * 防御性编程。
 *
 *
 * @Date 2019/12/15 0015 22:53
 * @Created by 埔枘
 */
public class ImmutableCollectionTest {


    public static final ImmutableSet<String> COLOR_NAMES = ImmutableSet.of(
            "red",
            "orange",
            "yellow",
            "green",
            "blue",
            "blue");

    public static void main(String[] args) {
        //转换成 不变的 list 集合
        System.out.println(COLOR_NAMES.asList());
        //不可修改的 迭代器
        UnmodifiableIterator<String> iterator = COLOR_NAMES.iterator();
        while(iterator.hasNext()){
            String next = iterator.next();
            /**
             *  打印
             *  red
             * orange
             * yellow
             * green
             * blue
             */
            System.out.println(next);
            if(Objects.equal("blue",next)){
                break;
            }
        }
        //处理迭代剩下的 元素
        iterator.forEachRemaining(new Consumer() {
            @Override
            public void accept(Object o) {
                /**
                 * 打印 accept: purple
                 */
                System.out.println("accept: "+o);
            }
        });
    }
}


